import axios from 'axios'
import {ElMessage} from 'element-plus'
import router from "@/router";

// 创建 axios 实例
const request = axios.create({
  baseURL: import.meta.env.VITE_API_PREFIX || '/api', // 接口基础路径（与代理前缀一致）
  timeout: 10000, // 请求超时时间（10秒）
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})
request.interceptors.request.use(
  (config) => {
    // 从缓存中获取 Token（确保登录时已存入 sessionStorage.token）
    const token = sessionStorage.token
    if (token) {
      // 给请求头添加 Token（后端需要的键名，如 usertoken 或 Authorization）
      // 注意：键名要和后端约定一致，这里假设后端需要 usertoken
      config.headers.usertoken = token
    }
    return config
  },
  (error) => {
    ElMessage.error('请求参数错误，请检查')
    return Promise.reject(error)
  }
)

// 响应拦截器：处理响应数据、统一错误提示
request.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    // 网络错误/服务器错误处理
    let errorMsg = '网络请求失败，请稍后重试'
    if (error.response) {
      // 根据 HTTP 状态码细化错误提示
      switch (error.response.status) {
        case 401:
          errorMsg = '登录已过期，请重新登录'
          router.push('/login')
          break
        case 403:
          errorMsg = '没有权限执行该操作'
          break
        case 404:
          errorMsg = '请求的接口不存在'
          break
        case 500:
          errorMsg = '服务器内部错误'
          break
        default:
          errorMsg = `请求错误（${error.response.status}）`
      }
    }
    ElMessage.error(errorMsg)
    return Promise.reject(error)
  }
)

// 封装常用请求方法
export default {
  // GET 请求
  get(url, params = {}) {
    return request({
      url,
      method: 'get',
      params
    })
  },

  // POST 请求
  post(url, data = {}) {
    return request({
      url,
      method: 'post',
      data
    })
  },

  // PUT 请求（更新资源）
  put(url, data = {}) {
    return request({
      url,
      method: 'put',
      data
    })
  },

  // DELETE 请求（删除资源）
  delete(url, params = {}) {
    return request({
      url,
      method: 'delete',
      params
    })
  }
}
